function vue() {
  this.$data = {
    a: 1
  }

  this.el = document.getElementById('app');
  this._html = "";
  this.observe(this.$data);//监控数据
  this.render();//初始数据绑定（渲染）
//当前vue对象 值遍历监控
}
vue.prototype.observe = function(obj) {
  var value;
  var self = this;
  for (var key in obj) {
    value = obj[key];
    //
    if (typeof value === 'object') {
      this.observe(value);//Object.observe() 用来实时监测js中对象的变化，变化时调用一个方法。
    } else {
      Object.defineProperty(this.$data, key, {
        get: function () {
          return value;
        }, set: function (newvalue) {
          value = newvalue;
          self.render();//调用自己方法当前页面重新绑定数据（渲染）
        }
      })
    }
  }
}
vue.prototype.render = function () {
  this._html = "i am" + this.$data.a;
  this.el.innerHTML = this._html;//el代表了网页中的app对象
}

//   ==：运算符称作相等，用来检copy测两个操作数是否相等，这里的相等定义的非常宽松，可以允许进行类型转换
// ===：用来检测两个操作数是否严格相等
// 1、对于string,number等基础类型，==和===是有区别的
// 不同类型间比较，==之比较“转化成同一类型后的值”看“值”是否相等，===如果类型不同，其结果就是不等
// 同类型比较，直接百进行“值”比较，两者结果一样
// 2、对于Array,Object等高级类型，==和度===是没有区别的
// 3、基础类型与高级类型，==和===是有区别的
// 对于==，将高级转化为基础类型，进行“值”比较，因为类型不同，===结果为false

// 1、prototype的定义
//
// javascript中的每个对象都有prototype属性，Javascript中对象的prototype属性的解释是：返回对象类型原型的引用。
//
// 每一个构造函数都有一个属性叫做原型。这个属性非常有用：为一个特定类声明通用的变量或者函数。
